/*
 * DropController.m
 *
 * Wilfredo Sanchez | wsanchez@apple.com
 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * The contents of this file constitute Original Code as defined in and
 * are subject to the Apple Public Source License Version 1.1 (the
 * "License").  You may not use this file except in compliance with the
 * License.  Please obtain a copy of the License at
 * http://www.apple.com/publicsource and read it before using this file.
 * 
 * This Original Code and all software distributed under the License are
 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
 * License for the specific language governing rights and limitations
 * under the License.
 * 
 * @APPLE_LICENSE_HEADER_END@
 */

#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import "DropController.h"

@implementation DropController

/* Init */

- (id) init
{
    if ((self = [super init]))
      {
        /* Set up... */
	myAppIsLaunching             = YES;
	myAppWasLaunchedWithDocument = NO;
	myScriptFileName             = [[[NSBundle mainBundle] pathForResource:@"script" ofType:nil] retain];

#if 0
	[[NSNotificationCenter defaultCenter] addObserver:self 
						 selector:@selector(checkATaskStatus:) 
						     name:NSTaskDidTerminateNotification
						   object:nil];
#endif
      }
    return self;
}

- (void) dealloc
{
    [myScriptFileName release];

    [super dealloc];
}

/* Notification handlers */

#if 0
- (void) checkATaskStatus: (NSNotification*) aNotification
{
    NSTask* aTask   = [aNotification object];
    int     aStatus = [aTask terminationStatus];

    if (aStatus)
	NSLog(@"Task %@ exited with non-zero exit status (%n).", [aTask arguments], aStatus);
    else
	NSLog(@"Task %@ suceeded.", [aTask arguments]);
}
#endif

/* Actions */

- (void) runScriptWithFiles: (NSArray* ) aFileList
{
    [NSTask launchedTaskWithLaunchPath: myScriptFileName
			     arguments: aFileList];
}

/* Application Deletate */

- (BOOL) application: (NSApplication*) anApplication
	    openFile: (NSString*     ) aFileName
{
    if (myAppIsLaunching) myAppWasLaunchedWithDocument = YES;

    [self runScriptWithFiles: [NSArray arrayWithObject: aFileName]];

    return YES;
}

- (void) applicationWillFinishLaunching: (NSNotification*) aNotification
{
    myAppIsLaunching = YES;
}

- (void) applicationDidFinishLaunching: (NSNotification*) aNotification
{
    myAppIsLaunching = NO;

    if (myAppWasLaunchedWithDocument)
	[(NSApplication*)[aNotification object] terminate: self];
}

/* IB Targets */

- (IBAction) open: (id) aSender
{
    NSOpenPanel* anOpenPanel = [NSOpenPanel openPanel];

    [anOpenPanel setCanChooseFiles          : YES];
    [anOpenPanel setCanChooseDirectories    : YES];
    [anOpenPanel setAllowsMultipleSelection : YES];

    if ([anOpenPanel runModalForTypes:nil] == NSOKButton)
      {
	[self runScriptWithFiles: [anOpenPanel filenames]];
      }
}

@end
